/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [Example01.java]
 * Creation Date        [23-Jul-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_principles.lsp.example03;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class Example01 {

	@SuppressWarnings("rawtypes")
	public static void main(String[] args) {
		Parent1 parent = new Parent1();
		HashMap map = new HashMap();
		parent.doSomething(map);

		Child1 child = new Child1();
		child.doSomething(map);
		// 父类输入参数是HashMap类型, 子类输入参数是Map类型, 也就是说子类的输入参数类型范围扩大了
		// 子类代替父类传递到调用者中,子类的方法永远不会被执行, 如果想要子类的方法运行, 就必须重写父类的方法
	}

}

/**
 * 父类
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
class Parent1 {

	/**
	 * 父类方法
	 * 
	 * @param map
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public Collection doSomething(HashMap map) {
		System.out.println("父类被执行...");
		return map.values();
	}
}

/**
 * 子类
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
class Child1 extends Parent1 {

	/**
	 * 放大子类输入参数类型, 不是重写方法
	 * 
	 * @param map
	 * @return Collection
	 */
	@SuppressWarnings("rawtypes")
	public Collection doSomething(Map map) {
		System.out.println("子类被执行...");
		return map.values();
	}
}
